package endereco;

import java.util.ArrayList;

import cliente.CadastroCliente;
import enderecoException.EnderecoCepNaoInformadoException;
import enderecoException.EnderecoCidadeNaoInformadaException;
import enderecoException.EnderecoClienteJaCadastradoException;
import enderecoException.EnderecoEstadoNaoInformadoException;
import enderecoException.EnderecoFuncionarioJaCadastradoException;
import enderecoException.EnderecoLogradouroNaoInformadoException;
import enderecoException.EnderecoNaoCadastradoException;
import enderecoException.EnderecoNaoInformadoException;
import enderecoException.EnderecoNumeroNaoInformadoException;
import enderecoException.EnderecoPaisNaoInformadoException;
import funcionario.CadastroFuncionario;

public class CadastroEndereco {
	private static RepositorioEndereco repEnd = new RepositorioEndereco();
	

	public void adicionar(Endereco end)
			throws EnderecoLogradouroNaoInformadoException,
			EnderecoNumeroNaoInformadoException,
			EnderecoCidadeNaoInformadaException,
			EnderecoEstadoNaoInformadoException,
			EnderecoPaisNaoInformadoException, EnderecoCepNaoInformadoException {

		if (end.getLogradouro().trim().isEmpty()) {
			throw new EnderecoLogradouroNaoInformadoException();
		} else if (end.getNumero().trim().isEmpty()) {
			throw new EnderecoNumeroNaoInformadoException();
		} else if (end.getCidade().trim().isEmpty()) {
			throw new EnderecoCidadeNaoInformadaException();
		} else if (end.getEstado().trim().isEmpty()) {
			throw new EnderecoEstadoNaoInformadoException();
		} else if (end.getPais().trim().isEmpty()) {
			throw new EnderecoPaisNaoInformadoException();
		} else if (end.getComplemento().trim().isEmpty()) {
			end.setComplemento("<Opcional>");
		}else if(end.getCep().trim().isEmpty()){
			throw new EnderecoCepNaoInformadoException();
		}else {
			this.repEnd.adicionar(end);
		}
	}

	public void editar(Endereco end)
			throws EnderecoLogradouroNaoInformadoException,
			EnderecoNumeroNaoInformadoException,
			EnderecoCidadeNaoInformadaException,
			EnderecoEstadoNaoInformadoException,
			EnderecoPaisNaoInformadoException, EnderecoNaoInformadoException, EnderecoCepNaoInformadoException {
		if (end.getId() <= 0) {
			throw new EnderecoNaoInformadoException();
		} else if (end.getLogradouro().trim().isEmpty()) {
			throw new EnderecoLogradouroNaoInformadoException();
		} else if (end.getNumero().trim().isEmpty()) {
			throw new EnderecoNumeroNaoInformadoException();
		} else if (end.getCidade().trim().isEmpty()) {
			throw new EnderecoCidadeNaoInformadaException();
		} else if (end.getEstado().trim().isEmpty()) {
			throw new EnderecoEstadoNaoInformadoException();
		} else if (end.getPais().trim().isEmpty()) {
			throw new EnderecoPaisNaoInformadoException();
		} else if (end.getComplemento().trim().isEmpty()) {
			end.setComplemento("<Opcional>");
		}else if(end.getCep().trim().isEmpty()){
			throw new EnderecoCepNaoInformadoException();
		}else {
			this.repEnd.editar(end);
		}
	}

	public void remover(int idEndereco) throws EnderecoNaoInformadoException,
			EnderecoClienteJaCadastradoException,
			EnderecoFuncionarioJaCadastradoException {
		
		CadastroCliente cadCliente = new CadastroCliente();
		CadastroFuncionario cadFuncionario = new CadastroFuncionario();
		if (idEndereco <= 0) {
			throw new EnderecoNaoInformadoException();
		} else if (cadCliente.ClienteTemEndereco(idEndereco)) {
			throw new EnderecoClienteJaCadastradoException();
		} else if (cadFuncionario.funcionarioTemEndereco(idEndereco)) {
			throw new EnderecoFuncionarioJaCadastradoException();
		} else {
			this.repEnd.remover(idEndereco);
		}
	}

	public Endereco pesquisar(int idEndereco)
			throws EnderecoNaoInformadoException, EnderecoNaoCadastradoException {
		Endereco end = null;
		if (idEndereco <= 0) {
			throw new EnderecoNaoInformadoException();
		} else {
			end = this.repEnd.pesquisar(idEndereco);
			if(end == null){
				throw new EnderecoNaoCadastradoException();
			}
		}
		return end;
	}

	public ArrayList<Endereco> listar() {
		return this.listar();
	}
	
	public int getNovoIdEndereco(){
		return this.repEnd.getIdNovoEndereco();
	}
	

}
